home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / util / misc / setman10g.lha / SetMan10g / setman.ita < prev    next >
Encoding:
Text File  |  1992-11-12  |  6.0 KB  |  148 lines

  1.  
  2.  
  3.                                SetFunction Manager
  4.  
  5.                              SetMan / SetManager V1.0
  6.  
  7.  
  8.   Copyright © 1991,1992 by
  9.  
  10.   Nicola Salmoria
  11.   Via Piemonte 11
  12.   53100 Siena ITALY
  13.  
  14.   Internet: mc6489@mclink.it
  15.  
  16.  
  17. Questo programma e` FREEWARE. NON e`, e non sara` mai, di pubblico dominio.
  18. Copiatelo quanto potete (purche` non venga fatto pagare, e purche` l'archivio
  19. venga lasciato intatto). Non puo` essere incluso in alcun programma commerciale
  20. senza autorizzazione scritta dell'autore.
  21.  
  22.  
  23.  
  24. UTENTI INESPERTI
  25. ----------------
  26. Il programma 'SetMan' andrebbe messo nella directory C: e eseguito come primo
  27. comando della startup-sequence. Quando dico primo, intendo PRIMO!! Va eseguito
  28. anche prima di SetPatch.
  29.  
  30. Se non siete esperti del sistema operativo di Amiga, tutto quello che avete
  31. bisogno di sapere su SetMan e` che, in certe circostanze, evita dei GURU.
  32. COntinuate a leggere per maggiori informazioni.
  33.  
  34.  
  35.  
  36. UTENTI ESPERTI
  37. --------------
  38. Entriamo nei dettagli. C'e` una funzione nella exec.library, il cui nome e`
  39. SetFunction(). Saprete che le librerie di Amiga contengono una 'jump table', in
  40. cui sono memorizzati gli indirizzi di tutte le funzioni della libraria. Le
  41. funzioni sono sempre eseguite attraverso la jump table, e MAI con indirizzi
  42. assoluti.
  43. SetFunction() permette all'utente di modificare la jump table, in modo da
  44. inserire una funzione personalizzata al posto di quella standard.
  45. Per esempio, uno potrebbe modificare il vettore di DisplayBeep() per sostituire
  46. un messaggio sonoro al lampeggio dello schermo.
  47.  
  48. SetFunction() e` una caratteristica molto utile del sistema operativo di Amiga,
  49. ma ha il grosso inconveniente che non c'e` una supervisione da parte del sistema
  50. operativo sull'uso contemporaneo delo stesso vettore da parte di programmi
  51. diversi. In certe circostanze, questo puo` essere letale.
  52. Prima di rimuovere il proprio vettore personalizzato, un programma dovrebbe
  53. controllare che questo non sia stato modificato di nuovo. Pero` in pochi lo
  54. fanno, e quindi se non si terminano tali programmi in ordine INVERSO a quando si
  55. sono eseguiti, probabilmente si causa un blocco del sistema.
  56.  
  57. Un altro guaio del KickStart 1.x e` che i vettori della dos.library non possono
  58. essere modificati da SetFunction(), perche` non seguono le convenzioni stabilite
  59. dalla stessa Commodore.
  60.  
  61. SetMan modifica il vettore di SetFunction(), e inserisce una sua routine che
  62. risolve entrambi i problemi precedenti. Mantiene una lista concatenata di tutti
  63. i cambiamenti alle jump tables, e permette a qualsiasi programma di rimuovere il
  64. proprio vettore in qualsiasi momento.
  65. Inoltre, permette di modificare i vettori della dos.library in modo trasparente
  66. e compatibile verso l'alto.
  67.  
  68.  
  69. In questo archivio c'e` un altro regalo, il cui nome e` SetManager. SetManager
  70. mostra la lista di tutti i vettori modificati, conil nome del programma che ha
  71. inserito la sua funzione personalizzata, l'indirizzo di tale funzione, e lo
  72. stato attuale.
  73. Lo stato sara` normalmente 'active'; cliccando sul nome della funzione, la si
  74. puo` disabilitare, rimuovendo quindi la routine personalizzata. Il terzo stato
  75. possibile e` 'removed', che capita solo quando non si terminano programmi nel
  76. corretto ordine che ho spiegato prima. E` visualizzato per informazione, ma non
  77. causa assolutamente nessun problema. Quando si termina l'altro programma che usa
  78. lo stesso vettore, entrambi spariranno dalla lista.
  79.  
  80. NOTA: i vettori modificati sono mostrati come 'scostamento' 'nome libraria'.
  81. SetManager e` pero` in grado di leggere i file standard 'xxx_lib.fd', forniti
  82. dalla Commodore nel disco 'Extras'. Basta assegnare il nome logico 'FD:' alla
  83. directory che contiene i file .fd, e questi verranno letti e interpretati al
  84. caricamento di SetManager. In questo modo, si avranno i veri nomi delle funzioni
  85. invece degli scostamenti.
  86.  
  87.  
  88.  
  89. PROGRAMMATORI
  90. -------------
  91. Suggerisco caldamente di usare le possibilita` offerte da SetMan per modificare
  92. i vettori della dos.library.
  93. Per sapere se SetMan e` attivo, tutto quel che bisogna fare e` cercare un
  94. MsgPort pubblico di nome "SetMan". Cio` e` necessario solo con KickStart 1.x,
  95. perche` dalla vrsione 2.0 del sistema operativo la dos.library e` diventata una
  96. libraria come tutte le altre. Comunque, SetMan e` abbastanza intelligente da
  97. usare la routine scritta appositamente per la dos.library solo se questa e`
  98. realmente la versione non standard.
  99. Ecco un esempio di come procedere:
  100.  
  101. -----------------------
  102.  
  103. if (DOSBase->dl_lib.lib_Version < 36 && !FindPort("SetMan"))
  104. {
  105.       printf("You need SetMan to execute this program!\n");
  106.       exit(RETURN_WARN);
  107. }
  108. else
  109. {
  110.       TrueFunction = SetFunction((struct Library *)DOSBase,FUNCOFFSET,NewFunction);
  111.  
  112.       etc etc.....
  113. }
  114.  
  115. -----------------------
  116.  
  117.  
  118.  
  119. BUG AND INCOMPATIBILITA`
  120. ------------------------
  121. Non ci sono bug noti in questa versione di SetMan.
  122.  
  123. Qualche parola in piu` va spesa sui problemi di compatibilita`.
  124. A causa delle procedure molto differenti usate da SetFunction() e da SetMan,
  125. non mi e` possibile garantire una compatibilita` al 100% con qualsiasi programma
  126. in giro. Ogni sforzo e` stato fatto per evitare tutti i problemi possibili;
  127. SetMan gestisce correttamemte tutti i comportamenti strani che mi sono venuti in
  128. mente; l'unico modo per confondere SetMan dovrebbe essere usare due programmi
  129. separati comunicanti tra di loro tramite un MsgPort e fare cose molto strane.
  130. Sono praticamente sicuro che tali cose non dovrebbero mai accadere.
  131.  
  132. Ho incontrato un problema con un programma di nome 'TurboTopaz', che si rifiuta
  133. di terminare dicendo che 'il vettore e` stato modificato'. Questo e` vero,
  134. perche` SetMan inserisce una sua funzione prima di quella personalizzata; se
  135. TurboTopaz usasse SetFunction(), riceverebbe come valore di ritorno quello che
  136. si aspetta, invece legge direttamente la jump table, una cosa che credo non sia
  137. garantita dalla Commodore.
  138.  
  139. Io uso molti programmi che chiamano SetFunction(), e nessuno di essi ha problemi
  140. con SetMan.
  141.  
  142.  
  143.  
  144. RINGRAZIAMENTO
  145. --------------
  146. Vorrei ringraziare Marco Ciuchini che mi ha indicato un importante problema di
  147. incompatibilita` che sono riuscito ad eliminare completamente.
  148.